package persistencia.compartido;

import compartido.IEntidad;

import persistencia.IEnsamblador;
import persistencia.carreras.ClaveValor;

public class EnsambladorDelegado extends ClaveValor {
	EnsambladorDelegado(Tipo<IEntidad> entidades, Tipo<? extends IEnsamblador> ensamblador) {
		super(entidades.getNombre(),ensamblador.getNombre());
	}
	
	public EnsambladorDelegado(ClaveValor claveValor) {
		super(claveValor);
	}
	
	@SuppressWarnings("unchecked")
	public Class<? extends IEntidad> getClase() {
		Class<?> clase = CargadorDeClases.getInstancia().cargarClase(getIdentificador());
		
		Class<? extends IEntidad> claseEntidad = null;
		if (IEntidad.class.isAssignableFrom(clase))
			claseEntidad = (Class<? extends IEntidad>) clase;
			
		return claseEntidad;
	}
	
	@SuppressWarnings("unchecked")
	public IEnsamblador crearEnsamblador() {
		Class<?> clase = CargadorDeClases.getInstancia().cargarClase(getValor());
		IEnsamblador ensamblador = null;
		if (IEnsamblador.class.isAssignableFrom(clase)) {
			Class<? extends IEnsamblador> claseEnsamblador = (Class<? extends IEnsamblador>) clase;
		
			try {
				ensamblador = claseEnsamblador.newInstance();
			} catch (InstantiationException e) {
				ensamblador = null;
			} catch (IllegalAccessException e) {
				ensamblador = null;
				e.printStackTrace();
			}
		}

		return ensamblador;
	}
	

}
